const App = {
    mixins: [Save],//配置文件，路径/utils/mixins.js
    data() {
        return {
            photo,
            volunteer_teams: [],
            Recorder: [],
            fileList: [],
            type: 0,
            fileUrl:'',
            showDialog:false
        };
    },
    mounted() {
        this.getCategory();
        let ls_URL = window.location.href;
        this.type = getQueryObject(ls_URL, "type") || '0';// 获取 nodeKey 参数
    },
    // watch:{
    //     'dataForm.News_Content'(val){
    //         console.log(val);
    //     }
    // },
    computed: {
        Personal_Name() {
            return function (val) {
                let obj = this.Recorder.filter(i => i.ID_Card_Number == val)[0];
                if (obj) {
                    return obj.Personal_Name
                } else {
                    return '';
                }
            }
        },
    },
    methods: {
        preview(row) {
            this.fileUrl = photo + row.Activity_Summary_URL;
            this.showDialog = true;
        },
        async download(row) {
            // if (row.Activity_Summary_URL) {
            //     window.location.href = photo + row.Activity_Summary_URL;
            // }
            let apiUrl = photo + row.Activity_Summary_URL;
            let fileName = apiUrl.split('/').pop();
            try {
                const response = await fetch(apiUrl);
                const blob = await response.blob();
                const url = window.URL.createObjectURL(blob);

                const a = document.createElement('a');
                a.href = url;
                a.download = fileName || 'download';
                document.body.appendChild(a);
                a.click();

                // 清理
                setTimeout(() => {
                    document.body.removeChild(a);
                    window.URL.revokeObjectURL(url);
                }, 100);
            } catch (error) {
                console.error('下载失败:', error);
            }
        },
        getData(nodeKey) {//查询
            const that = this;
            //获取对应子表表单对象
            let lJSONObject_Children = new Array();
            let lJSONObject_ChildData = new Object();
            try {
                //可能涉及多个子表
                document.getElementById("ChildTable").querySelectorAll(".el-descriptions").forEach(item => {
                    let lJSONObject_ChildData_Options = new Object();
                    lJSONObject_ChildData_Options = JSON.parse(item.getAttribute("data-options"));

                    let ls_ChildTableName = lJSONObject_ChildData_Options.TableName;
                    let ls_ChildDataForm = lJSONObject_ChildData_Options.form;

                    lJSONObject_ChildData[ls_ChildTableName] = ls_ChildDataForm;
                    lJSONObject_Children[ls_ChildTableName] = 'ChildTable';
                })
            } catch (error) { }
            //获得对应表单对象
            let lJSONObject_Data_Options = new Object();
            lJSONObject_Data_Options = JSON.parse(document.getElementById("MainTable").getAttribute("data-options"));
            let ls_DataForm = lJSONObject_Data_Options.form;
            let ls_TableName = lJSONObject_Data_Options.TableName;
            let ls_primary_key = lJSONObject_Data_Options.primary_key

            let lJSONObject_Data = new Object();
            lJSONObject_Data[ls_TableName] = ls_DataForm;
            lJSONObject_Data = { ...lJSONObject_Data, ...lJSONObject_ChildData };

            let lJSONObject_TableName = new Object();
            lJSONObject_TableName[ls_TableName] = 'MainTable'
            lJSONObject_TableName = { ...lJSONObject_TableName, ...lJSONObject_ChildData };
            for (let key in lJSONObject_TableName) {
                $.ajax({
                    headers: requestHeaders(),
                    url: `${mh}/generalBusiness/generalQueryByTableNameWithOriginal`,
                    method: "post",
                    data: {
                        Data: key,
                        Condition: `${ls_primary_key}='${nodeKey}'`,
                    },
                    success: (res) => {
                        if (lJSONObject_TableName[key] == 'MainTable') {
                            that[lJSONObject_Data[key]] = res[0];
                        } else {
                            that[lJSONObject_Data[key]] = res;
                            let arr = []
                            res.filter(i => i.Row_Status != '1').forEach(item => {
                                arr.push({ name: item.Activity_Name, url: photo + item.Activity_Summary_URL, id: item.Volunteer_Teams_Activities_SerialNumber })
                            })
                            this.fileList = arr;
                        }
                    },
                    complete: (XMLHttpRequest) => {
                        requestPretreatment(XMLHttpRequest);
                    },
                });
            }
        },
        getCategory() {
            $.ajax({
                headers: requestHeaders(),
                url: `${mh}/generalBusiness/generalQueryByTableName`,
                type: "POST",
                data: {
                    Data: 'volunteer_teams',
                    Condition: "Row_Status='0'",
                },
                success: (data) => {
                    this.volunteer_teams = data; // 直接使用 this
                },
                complete: (XMLHttpRequest) => {
                    requestPretreatment(XMLHttpRequest);
                },
                dataType: "json",
            });
            $.ajax({
                headers: requestHeaders(),
                url: `${mh}/generalBusiness/generalQueryByTableNameWithOriginal`,
                method: "post",
                data: {
                    Data: "personal_information", //表名
                    Condition: "Row_Status='0'",
                },
                success: (res) => {
                    this.Recorder = res;
                },
                complete: (XMLHttpRequest) => {
                    requestPretreatment(XMLHttpRequest);
                },
            });
        },
        changeVolunteer(val) {
            $.ajax({
                headers: requestHeaders(),
                url: `${mh}/generalBusiness/generalQueryBySQLSerialNumber`,
                method: "post",
                data: {
                    SQLSerialNumber: "f_volunteer_teams_members",
                    Condition: window.btoa(unescape(encodeURIComponent(val))),
                    ExtensionCondition: ''
                },
                success: (res) => {
                    this.childDataForm = res;
                },
                complete: (XMLHttpRequest) => {
                    requestPretreatment(XMLHttpRequest);
                },
            });
        },
        async handleSubmit() {
            const allValid = await this.validateAllForms();
            if (allValid) {
                this.loading = true;
                let ls_URL = window.location.href;
                const action = getQueryObject(ls_URL, "action");   // 获取 action 参数
                let lJSONObject_Data_Options = new Object();
                lJSONObject_Data_Options = JSON.parse(document.getElementById("MainTable").getAttribute("data-options"));

                let ls_MainTableName = lJSONObject_Data_Options.TableName;
                let ls_DataForm = lJSONObject_Data_Options.form;
                let ls_primary_key = lJSONObject_Data_Options.primary_key;
                //没有子表下面内容就会报错，try/catch抛出异常
                try {
                    //可能涉及多个子表
                    document.getElementById("ChildTable").querySelectorAll(".el-descriptions").forEach(item => {
                        let lJSONObject_ChildData_Options = new Object();
                        lJSONObject_ChildData_Options = JSON.parse(item.getAttribute("data-options"));

                        let ls_ChildTableName = lJSONObject_ChildData_Options.TableName;
                        let ls_ChildDataForm = lJSONObject_ChildData_Options.form;
                        // let ls_ParentTableName = lJSONObject_ChildData_Options.ParentTableName;
                        if (this[ls_DataForm][ls_primary_key]) {
                            this[ls_ChildDataForm].forEach(item => {
                                item[ls_primary_key] = this[ls_DataForm][ls_primary_key];
                            })
                        }
                        //建立子表结构体
                        let JSONArray_ChildRecord = new Array();
                        JSONArray_ChildRecord = this[ls_ChildDataForm];
                        if (!this[ls_DataForm].Children) {
                            this[ls_DataForm].Children = new Object();
                        }
                        this[ls_DataForm].Children[ls_ChildTableName] = JSONArray_ChildRecord;
                    })
                } catch (error) {

                }
                //建立新增提交结构
                let lJSONObject_DataSet = new Object();
                if (action == 'Add') {
                    if (this.nodeKey) {
                        this[ls_DataForm].Parent_SerialNumber = this.nodeKey;
                    }
                    let lJSONArray_Record = new Array();
                    lJSONArray_Record.push(this[ls_DataForm]);
                    let lJSONObject_Table = new Object();
                    lJSONObject_Table[ls_MainTableName] = lJSONArray_Record;
                    lJSONObject_DataSet[action] = lJSONObject_Table;
                } else if (action == 'Modify') {
                    const { add, modify } = this.deal(this[ls_DataForm]);
                    let lJSONArray_Record = new Array();
                    lJSONArray_Record.push(modify);

                    let lJSONObject_Table = new Object();
                    lJSONObject_Table[ls_MainTableName] = lJSONArray_Record;

                    lJSONObject_DataSet[action] = lJSONObject_Table;
                    lJSONObject_DataSet['Add'] = new Object();
                    if (add != null) {
                        let lJSONArray_Record_Add = new Array();
                        lJSONArray_Record_Add.push(add);

                        let lJSONObject_Table_Add = new Object();
                        lJSONObject_Table_Add[ls_MainTableName] = lJSONArray_Record_Add;

                        lJSONObject_DataSet['Add'] = lJSONObject_Table_Add;
                    }
                }
                $.ajax({
                    headers: requestHeaders(),
                    url: `${mh}/generalBusiness/generalQueryByTableNameWithOriginal`,
                    method: "post",
                    data: {
                        Data: "volunteer_teams_activities_members", //表名
                        Condition: "Row_Status='0' AND Volunteer_Teams_Activities_SerialNumber='" + this.nodeKey + "' AND Check_Out_Datetime = ''",
                    },
                    success: (data) => {
                        data.forEach(item => {
                            item.Check_Out_Datetime = getYMDHMSDate();
                        })
                        lJSONObject_DataSet['Modify']['volunteer_teams_activities_members'] = data;
                        let Operation_Main = JSON.stringify(deepClone(lJSONObject_DataSet));
                        if (!lJSONObject_DataSet['Add']) {
                            lJSONObject_DataSet['Add'] = new Object();
                        }
                        lJSONObject_DataSet['Add']['base_operation_log'] = [{
                            Operation_Type: '0',
                            Operation_Path: this.relativePath,
                            Operation_Main,
                            Operation_Interface: "generalSave",
                            Operation_IP: getIpAddress()
                        }]
                        submitSave(lJSONObject_DataSet, (res) => {
                            if (res.Status == 'success') {
                                window.location.href = './index.html'
                                // window.history.go(-1);
                            }
                            this.loading = false;
                        })
                        // $.ajax({
                        //     headers: requestHeaders(),
                        //     url: `${mh}/generalBusiness/generalSave`,
                        //     method: "post",
                        //     data: {
                        //         Data: JSON.stringify(lJSONObject_DataSet),
                        //     },
                        //     success: (res) => {
                        //         if (res.Status == 'success') {
                        //             window.location.href = './index.html'
                        //             // window.history.go(-1);
                        //         }
                        //     },
                        //     complete: () => {
                        //         this.loading = false;
                        //     }
                        // });
                    },
                });

            }
        },
        async handleChange({ raw }) {
            const result = await uploadBinaryFile(raw);
            if (result.status == 'success') {
                this.childDataForm.push({
                    Activity_Summary_URL: result.fileName,
                    Activity_Name: raw.name,
                    Temp_Path: result.tempPath,
                    uid: raw.uid,
                })
            }
        },
        handleRemove(file) {
            if (file.raw) {
                this.childDataForm = this.childDataForm.filter(i => i.uid == file.raw.uid)
            } else {
                this.childDataForm.filter(i => i.Volunteer_Teams_Activities_SerialNumber == file.id)[0].Row_Status = '1'
            }

        },
    },
};
const { createApp, ref } = Vue;
const app = createApp(App);
app.use(ElementPlus, { locale: zhCn });
//这种方式是引入全部图标，无需单个引入
for (const [key, component] of Object.entries(ElementPlusIconsVue)) {
    app.component(key, component);
}
app.component('yl-upload', ylUpload);
app.component('yl-text-editor', ylTextEditor);
app.component('yl-online-preview', ylOnlinePreview);
const ElMessage = ElementPlus.ElMessage;
app.mount("#app");
